package com.huosu.commons.response;

import lombok.Data;

import java.io.Serializable;

/**
 * 响应报文
 *
 * @param <T>
 * @author lyc
 */
@Data
public class ApiResult<T> implements Serializable {

    private static final long serialVersionUID = 6405629435684529060L;

    /**
     * 状态码
     */
    private Integer code;

    /**
     * 提示消息
     */
    private String msg;

    /**
     * 返回数据
     */
    private T data;

    public ApiResult() {
        this.code = ApiErrorCode.SUCCESS.getCode();
        this.msg = ApiErrorCode.SUCCESS.getMsg();
    }

    private ApiResult(T data) {
        this.code = ApiErrorCode.SUCCESS.getCode();
        this.msg = ApiErrorCode.SUCCESS.getMsg();
        this.data = data;
    }

    private ApiResult(ApiErrorCode apiErrorCode) {
        this.code = apiErrorCode.getCode();
        this.msg = apiErrorCode.getMsg();
    }

    private ApiResult(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    /**
     * 请求是否成功
     *
     * @return
     */
    public boolean isOk() {
        if (this.code.intValue() == ApiErrorCode.SUCCESS.getCode().intValue()) {
            return true;
        }
        return false;
    }

    /**
     * 成功返回(带数据)
     *
     * @param data
     * @return
     */
    public static <T> ApiResult<T> ok(T data) {
        return new ApiResult<T>(data);
    }

    /**
     * 成功返回（不带数据）
     *
     * @param <T>
     * @return
     */
    public static <T> ApiResult<T> ok() {
        return new ApiResult<T>();
    }

    /**
     * 失败返回（使用系统状态码）
     *
     * @param apiErrorCode
     * @param <T>
     * @return
     */
    public static <T> ApiResult<T> fail(ApiErrorCode apiErrorCode) {
        return new ApiResult<T>(apiErrorCode);
    }

    /**
     * 失败返回（自定义状态码和消息）
     *
     * @param code
     * @param msg
     * @return
     */
    public static <T> ApiResult<T> fail(Integer code, String msg) {
        return new ApiResult<T>(code, msg);
    }

}

